import java.util.*;

public class Solution {
    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
    }

//    List<Integer> list = new ArrayList<>();
//    void DFS(TreeNode root, int n){
//        if(root == null){
//            return;
//        }
//        if(n >= list.size()){
//            list.add(root.val);
//        }
//        DFS(root.right, n + 1);
//        DFS(root.left, n + 1);
//    }
//
//    public List<Integer> rightSideView(TreeNode root) {
//        DFS(root, 0);
//        return list;
//    }
//    List<Integer> list = new ArrayList<>();
//    public List<Integer> rightSideView(TreeNode root) {
//        Queue<TreeNode> queue = new LinkedList<>();
//        if(root == null){
//            return list;
//        }
//        queue.add(root);
//        while(!queue.isEmpty()){
//            int sz = queue.size();
//            for(int i = 0; i < sz; i++) {
//                TreeNode tmp = queue.remove();
//                if (tmp.left != null) {
//                    queue.add(tmp.left);
//                }
//                if (tmp.right != null) {
//                    queue.add(tmp.right);
//                }
//                if(i == sz - 1){
//                    list.add(tmp.val);
//                }
//            }
//
//        }
//        return list;
//    }

//    Long r = Long.MAX_VALUE;
//    Long l = Long.MIN_VALUE;
//
//    public boolean DFS(TreeNode root, long left, long right){
//        if(root == null){
//            return true;
//        }
//
//        if(root.val > left && root.val < right){
//            if(DFS(root.left, left, root.val) && DFS(root.right, root.val, right))
//                return true;
//        }
//        return false;
//    }
//    public boolean isValidBST(TreeNode root) {
//        return DFS(root, l, r);
//    }

        long lower = Long.MIN_VALUE;
        boolean DFS(TreeNode root){
            if(root == null){
                return true;
            }
            boolean l = DFS(root.left);
            if(root.val > lower){
                lower = root.val;
            } else{
                return false;
            }
            boolean r = DFS(root.right);
            return l && r;
        }

        public boolean isValidBST(TreeNode root) {
            return DFS(root);
        }

    public static void main(String[] args) {
        System.out.println(Integer.MAX_VALUE);
    }
}
